from rest_framework import serializers
from django.conf import settings
from goods.models import SKUImage, SKU
from fdfs_client.client import Fdfs_client
# from meiduo_admin.utils import get_detail_html
from celery_tasks.static_html.tasks import get_detail_html


class SKUImageSerialzier(serializers.ModelSerializer):
    """
        商品图片序列化器
    """

    class Meta:
        # 指定生成序列化字段的模型类
        model = SKUImage
        # 指定字段
        fields = ('id', 'image', 'sku')

    def create(self, validated_data):
        # 保存fastDFS
        # 1、建立fastDFS连接对象
        client = Fdfs_client(settings.FDFS_CLIENT_PATH)
        # 2、获取图片数据
        image = validated_data['image']
        # 3、上传图片到fastDFS系统upload_by_buffer上传文件二进制数据
        res = client.upload_by_buffer(image.read())
        # 4、获取返回结果，判断上传是否成功，不成功抛出异常
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('上传失败')
        # 5、获取结果中的图片地址
        img_url = res['Remote file_id']
        # 6、将获取到的图片地址路径保存在skuimage表中
        # img = SKUImage.objects.create(image=img_url, sku=validated_data['sku'])
        img = SKUImage.objects.create(image=img_url, sku_id=validated_data['sku'].id)
        # 静态化生成新的详情页面
        get_detail_html.delay(validated_data['sku'].id)
        # 7、返回保存后的图片对象
        return img

    def update(self, instance, validated_data):
        # 保存fastDFS
        # 1、建立fastDFS连接对象
        client = Fdfs_client(settings.FDFS_CLIENT_PATH)
        # 2、获取图片数据
        image = validated_data['image']
        # 3、上传图片到fastDFS系统upload_by_buffer上传文件二进制数据
        res = client.upload_by_buffer(image.read())
        # 4、获取返回结果，判断上传是否成功，不成功抛出异常
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('上传失败')
        # 5、获取结果中的图片地址
        img_url = res['Remote file_id']
        # 6、将获取到的图片地址路径更新到skuimage表中
        instance.sku_id=validated_data['sku'].id
        instance.image=img_url
        instance.save()

        #静态化生成新的详情页面  异步任务调用
        # get_detail_html(validated_data['sku'])
        get_detail_html.delay(validated_data['sku'].id)
        # 7、返回保存后的图片对象
        return instance



class SKUSerialzier(serializers.ModelSerializer):
    """
        商品SKU序列化器

    """

    class Meta:
        # 指定生成序列化字段的模型类
        model = SKU
        # 指定字段
        fields = ('id', 'name')
